package com.tedu.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.util.JSONPObject;
import com.tedu.pojo.SmbmsRole;
import com.tedu.pojo.SmbmsUser;
import com.tedu.servies.UserRoleServies;
import com.tedu.servies.UserServies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;

/**
 * 处理与用户相关的请求
 */

@Controller
public class UserController {
    @Autowired  // 从spring容器中，取对象（通过名称、类型）
    UserServies userServies;
    @Autowired
    UserRoleServies userRoleServies;

    @RequestMapping("/login")
    public String login(SmbmsUser smbmsUser, HttpSession session, Model model){
        System.out.println(smbmsUser);

        //调用服务层接口方法，实现登陆操作
        SmbmsUser userByLogin = userServies.getUserByLogin(smbmsUser);
        //判断一下是否登陆成功
        if(userByLogin!=null){
            //登陆成功
            session.setAttribute("userOnLogin",userByLogin);
            return "frame";  //项目的主页
        }else {
            // 登陆失败
            model.addAttribute("error","你输入的用户名密码错误，请重新登陆");
            return "login";
        }



//

    }

    //用户管理   全部用户信息
    @RequestMapping("/sys/user")
    public String getAllUser(Model model){
//        处理器方法------调用服务，获取全部用户信息----数据发送给用户/
        List<SmbmsUser> allUser = userServies.getAllUser();
        //发送数据到视图
        model.addAttribute("userList",allUser);
        return "/user/userlist";
    }

    /**
     * 显示用户添加爷们门面
     * @return
     */
    @RequestMapping("/sys/useradd")
    public String userAdd(Model model){
        //把全部的用户角色发送到页面
        List<SmbmsRole> allRole = userRoleServies.getAllRole();
        model.addAttribute("allRole",allRole);
        return "/user/useradd";
    }

    /**
     * 用户信息查询/sys/viewUser.do?uid=1
     * @return
     */
    @RequestMapping("/sys/viewUser")
    public String userView(int uid,Model model){

        //调用服务层方法，获取用户信息
       SmbmsUser user = userServies.getUserById(uid);
       //把用户信息发送给用户
        model.addAttribute("user",user);
        //user.role.roleName}
        //通过角色id  获取用户角色
        SmbmsRole role = userRoleServies.getRoleById(user.getUserrole());
        model.addAttribute("roleName",role.getRolename());

        return "/user/userview";

    }

    /**
     * 显示用户信息修改页面------还没有进行修改
     * t/sys/modifyUser.do?uid=1
     * @return
     */
    @RequestMapping("/sys/modifyUser")
    public String toUpdateUser(int uid,Model model){

        //调用服务层方法，获取用户信息
        SmbmsUser user = userServies.getUserById(uid);
        //把用户信息发送给用户
        model.addAttribute("user",user);
        //user.role.roleName}
        //通过角色id  获取用户角色
        SmbmsRole role = userRoleServies.getRoleById(user.getUserrole());
        model.addAttribute("roleName",role.getRolename());

        return "/user/usermodify";

    }

    /**
     * 获取全部的用户角色信息。返回是json数据格式
     * @return
     */
    @RequestMapping("/sys/getrolelist")
    @ResponseBody
    public String getAllRole() throws JsonProcessingException {

        //调用服务方法，获取全部用户角色信息
        List<SmbmsRole> allRole = userRoleServies.getAllRole();
        //使用Jackson  把集合转换json数据格式
        //创建ObjectMapper对象。
        ObjectMapper mapper = new ObjectMapper();
        //序列化对象到JSON
        String s = mapper.writeValueAsString(allRole);

        System.out.println("json:"+s);
        return s;


    }


    @ResponseBody
    @RequestMapping("/sys/usercode")
    public String getUsercode(String userCode) throws JsonProcessingException {
        //查看用户名是否存在
        boolean is = userServies.getUserByCode(userCode);
        HashMap<String,String> res = new HashMap<>();
        if(is){
            //存在
            res.put("userCode","exist");
        }else{
            res.put("userCode","no exist");
        }
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(res);
    }

}
